import axios from 'axios';
import { useStore } from '@/store';
import { showLoadingToast, showToast, showSuccessToast, showFailToast, closeToast } from 'vant';
const store = useStore();

// axios.defaults.baseURL = ''  //正式
// axios.defaults.baseURL = 'http://test' //测试
const service = axios.create({
    // baseURL: process.env.NODE_ENV === "production" ? process.env.VUE_APP_REQUEST_URL : "/", // api的base_url
    timeout: 30000, // 请求超时时间
});

//post请求头
// axios.defaults.headers.post["Content-Type"] ="application/x-www-form-urlencoded;charset=UTF-8";
//设置超时
// axios.defaults.timeout = 10000;
// ts定义，不定义使用会显示错误
declare module 'axios' {
    interface AxiosInstance {
        (config: AxiosRequestConfig): Promise<any>;
    }
}

service.interceptors.request.use(
    (config) => {
        // config.headers["token"] = sessionStorage.getItem("token");
        config.headers['token'] = store.openid;
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

service.interceptors.response.use(
    (response) => {
        if (response.status == 200) {
            // console.log(response)
            return Promise.resolve(response.data);
        } else {
            return Promise.reject(response);
        }
    },
    (error) => {
        // alert(`异常请求：${JSON.stringify(error.message)}`)
        // console.log(`异常请求：${JSON.stringify(error.message)}`)
        return Promise.reject(error);
    }
);
// export default service;

const request = (
    { url, method, data, params }: { url: string; method: string; data?: any; params?: any },
    isLoading: boolean = false,
    isShowErrToast: boolean = false
) => {
    return new Promise((resolve, reject) => {
        let loading;
        if (isLoading) {
            loading = showLoadingToast({
                message: '加载中...',
                forbidClick: true,
                duration: 0,
            });
        }
        service({
            url,
            method,
            data,
            params,
        })
            .then((res) => {
                if (isLoading) {
                    loading.close();
                }
                if (res?.code && res.code == 200) {
                    resolve(res);
                } else if (res?.code && res.code == 500) {
                    if (isShowErrToast) {
                        closeToast();
                        showFailToast({
                            message: res?.msg ? res.msg : '请求失败，请稍后重试！',
                            forbidClick: true,
                        });
                    }
                    reject(res);
                } else {
                    resolve(res);
                }
                //   resolve(res.data)
            })
            .catch((err) => {
                console.log(err);

                if (isLoading) {
                    loading.close();
                }
                if (isShowErrToast) {
                    closeToast();
                    showFailToast({
                        message: '请求失败，请稍后重试！',
                        forbidClick: true,
                    });
                }
                // 未登录情况提示，正常未登录应该不在报错里体现的，应该在成功里面返回不一样的code来判断，但后端这样返回没办法
                if (err?.response?.data.status == 500) {
                    closeToast();
                    showFailToast({
                        message: err.response.data?.message ? err.response.data.message : '请求失败，请稍后重试！',
                        forbidClick: true,
                    });
                }
                reject(err);
            });
    });
};
export default request;

// export default {
//   post(url, data) {
//     return new Promise((resolve, reject) => {

//       service({
//           method: 'post',
//           url,
//           data: data,
//         })
//         .then(res => {
//           resolve(res.data)
//         })
//         .catch(err => {
//           reject(err)
//         });
//     })
//   },

//   get(url, data) {
//     return new Promise((resolve, reject) => {
//       service({
//           method: 'get',
//           url,
//           params: data,
//         })
//         .then(res => {
//           resolve(res.data)
//         })
//         .catch(err => {
//           reject(err)
//         })
//     })
//   }
// };
